
/**
 * Angular Strap 配置服务
 * 
 * 用于配置 Angular Strap 组件的默认选项和中文化设置
 * 
 * Angular Strap 组件使用示例:
 * 
 * 1. Modal 模态框:
 * <button bs-modal="'path/to/modal.html'">打开模态框</button>
 * 
 * 2. Tooltip 提示:
 * <button bs-tooltip="'这是一个提示'">悬停显示提示</button>
 * 
 * 3. Popover 弹出框:
 * <button bs-popover="'弹出内容'" data-title="标题">点击显示弹出框</button>
 * 
 * 4. Dropdown 下拉菜单:
 * <button bs-dropdown="dropdown.items">下拉菜单</button>
 * 
 * 5. Datepicker 日期选择器:
 * <input bs-datepicker ng-model="selectedDate" type="text">
 * 
 * 6. Timepicker 时间选择器:
 * <input bs-timepicker ng-model="selectedTime" type="text">
 * 
 * 7. Alert 警告框:
 * <div bs-alert="alert.type">{{alert.message}}</div>
 * 
 * 8. Typeahead 自动完成:
 * <input bs-typeahead bs-options="item for item in suggestions" ng-model="query">
 */

// 配置块 - 在这里配置providers
const StrapConfig = function($modalProvider, $tooltipProvider, $popoverProvider) {
  'ngInject';

  // 检查provider是否存在并配置
  if ($modalProvider && $modalProvider.defaults) {
    angular.extend($modalProvider.defaults, {
      animation: 'am-fade-and-scale',
      backdrop: 'static',
      keyboard: true,
      html: true,
      container: 'body'
    });
  }

  if ($tooltipProvider && $tooltipProvider.defaults) {
    angular.extend($tooltipProvider.defaults, {
      animation: 'am-fade',
      placement: 'top',
      trigger: 'hover focus',
      html: true,
      delay: { show: 200, hide: 100 },
      container: 'body'
    });
  }

  if ($popoverProvider && $popoverProvider.defaults) {
    angular.extend($popoverProvider.defaults, {
      animation: 'am-fade',
      placement: 'right',
      trigger: 'click',
      html: true,
      delay: { show: 200, hide: 100 },
      container: 'body'
    });
  }
};

// 服务 - 运行时使用的服务
const StrapConfigService = function() {
  'ngInject';

  const service = {};

  // 添加中文语言包
  service.addChineseLocale = function() {
    // Datepicker 中文语言包
    if (window.moment) {
      moment.locale('zh-cn', {
        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
        longDateFormat: {
          LT: 'HH:mm',
          LTS: 'HH:mm:ss',
          L: 'YYYY-MM-DD',
          LL: 'YYYY年MM月DD日',
          LLL: 'YYYY年MM月DD日Ah点mm分',
          LLLL: 'YYYY年MM月DD日ddddAh点mm分',
          l: 'YYYY-M-D',
          ll: 'YYYY年M月D日',
          lll: 'YYYY年M月D日 HH:mm',
          llll: 'YYYY年M月D日dddd HH:mm'
        },
        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
        meridiem: function (hour, minute, isLower) {
          const hm = hour * 100 + minute;
          if (hm < 600) {
            return '凌晨';
          } else if (hm < 900) {
            return '早上';
          } else if (hm < 1130) {
            return '上午';
          } else if (hm < 1230) {
            return '中午';
          } else if (hm < 1800) {
            return '下午';
          } else {
            return '晚上';
          }
        },
        calendar: {
          sameDay: '[今天]LT',
          nextDay: '[明天]LT',
          nextWeek: '[下]ddddLT',
          lastDay: '[昨天]LT',
          lastWeek: '[上]ddddLT',
          sameElse: 'L'
        },
        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
        ordinal: function (number, period) {
          switch (period) {
            case 'd':
            case 'D':
            case 'DDD':
              return number + '日';
            case 'M':
              return number + '月';
            case 'w':
            case 'W':
              return number + '周';
            default:
              return number;
          }
        },
        relativeTime: {
          future: '%s内',
          past: '%s前',
          s: '几秒',
          ss: '%d秒',
          m: '1分钟',
          mm: '%d分钟',
          h: '1小时',
          hh: '%d小时',
          d: '1天',
          dd: '%d天',
          M: '1个月',
          MM: '%d个月',
          y: '1年',
          yy: '%d年'
        },
        week: {
          dow: 1, // Monday is the first day of the week.
          doy: 4  // The week that contains Jan 4th is the first week of the year.
        }
      });
    }
  };

  return service;
};

const strapConfig = function(StrapConfigService) {
  'ngInject';
  
  // 添加中文语言包
  StrapConfigService.addChineseLocale();
};

function initStrapConfigService() {
  const angular = window.angular;
  
  if (!angular) {
    console.error('Angular 未找到，无法初始化Strap配置服务模块');
    return;
  }

  angular.module('app.services.strapConfig', ['mgcrea.ngStrap'])
    .config(StrapConfig)
    .service('StrapConfigService', StrapConfigService)
    .run(strapConfig);
}

// Listen for vendor libs loaded event
window.addEventListener('vendorLibsLoaded', () => {
  initStrapConfigService();
});

// If Angular already loaded, init directly  
if (window.angular) {
  initStrapConfigService();
}